package it.univaq.disim.mwt.business.impl;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import it.univaq.disim.mwt.business.DebitiFormativiService;
import it.univaq.disim.mwt.business.model.Alunno;
import it.univaq.disim.mwt.business.model.DebitoFormativo;
import it.univaq.disim.mwt.business.model.Insegnante;
import it.univaq.disim.mwt.business.model.Materia;
import it.univaq.disim.mwt.business.model.TipologiaLaboratorio;

public class JDBCDebitoFormativoService implements DebitiFormativiService {

	@Override
	public DebitoFormativo findDebitiFormativiById(Long id) {
		
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		String sql = "select * from debiti_formativi where id = ? ";
		DebitoFormativo debitiFormativi = null;
		
		try {
		
			connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "school", "school");
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setLong(1, id);
			preparedStatement.executeQuery();
			resultSet = preparedStatement.getResultSet();
			resultSet.next();
                      
            Long ide=resultSet.getLong("id");
            Long idAlunno=resultSet.getLong("id_alunno");
            Long idMateria=resultSet.getLong("id_materia");
            Long idInsegnante=resultSet.getLong("id_insengnante");
            int voto=resultSet.getInt("voto");
            String annoScolastico=resultSet.getString("anno_scolastico");
            String debitoFormativoColmato=resultSet.getString("debito_formativo_colmato");
            
            JDBCAlunnoService jdbcAlunnoService=new JDBCAlunnoService();
            Alunno alunno=jdbcAlunnoService.findAlunnoById(idAlunno);
            
            JDBCMateriaService jdbcMateriaService= new JDBCMateriaService();
            Materia materia=jdbcMateriaService.findMateriaById(idMateria);
            
            JDBCInsegnanteService jdbcInsegnanteService= new JDBCInsegnanteService();
            Insegnante insegnante= jdbcInsegnanteService.findInsegnanteById(idInsegnante);
            
            debitiFormativi = new DebitoFormativo(ide,alunno,materia,insegnante,voto,annoScolastico,debitoFormativoColmato);
            
            resultSet.close();
			preparedStatement.close();
			connection.close();
			
			return debitiFormativi;

		
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public List<DebitoFormativo> findAllDebitiFOrmativi() {
		
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		List<DebitoFormativo> listDebiti= new ArrayList<DebitoFormativo>();
		String sql = " select * from debiti_formativi ";
		DebitoFormativo debitiFormativi = null;

		try {
			
			connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "school", "school");
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.executeQuery();
			resultSet = preparedStatement.getResultSet();
			
			while(resultSet.next()){
			
				Long ide=resultSet.getLong("id");
	            Long idAlunno=resultSet.getLong("id_alunno");
	            Long idMateria=resultSet.getLong("id_materia");
	            Long idInsegnante=resultSet.getLong("id_insengnante");
	            int voto=resultSet.getInt("voto");
	            String annoScolastico=resultSet.getString("anno_scolastico");
	            String debitoFormativoColmato=resultSet.getString("debito_formativo_colmato");
	            
	            JDBCAlunnoService jdbcAlunnoService=new JDBCAlunnoService();
	            Alunno alunno=jdbcAlunnoService.findAlunnoById(idAlunno);
	            
	            JDBCMateriaService jdbcMateriaService= new JDBCMateriaService();
	            Materia materia=jdbcMateriaService.findMateriaById(idMateria);
	            
	            JDBCInsegnanteService jdbcInsegnanteService= new JDBCInsegnanteService();
	            Insegnante insegnante= jdbcInsegnanteService.findInsegnanteById(idInsegnante);
	            
	            debitiFormativi = new DebitoFormativo(ide,alunno,materia,insegnante,voto,annoScolastico,debitoFormativoColmato);

	            listDebiti.add(debitiFormativi);
			}
			
			resultSet.close();
			preparedStatement.close();
			connection.close();
			
			return listDebiti;
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return null;
	}
	
}